/**
 * Copyright (c) 2020 Coder League
 * All rights reserved.
 *
 * File：OrganizationController.java
 * History:
 *         2020年12月20日: Initially created, Chrise.
 */
package club.coderleague.cfss.controller.organization;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import club.coderleague.cfss.annotations.PassiveRequest;
import club.coderleague.cfss.annotations.Request;
import club.coderleague.cfss.controller.IndexController;
import club.coderleague.cfss.domain.entities.Organizations;
import club.coderleague.cfss.domain.enums.EntityState;
import club.coderleague.cfss.service.organization.OrganizationService;

/**
 * 机构控制器。
 * @author Chrise
 */
@Controller
@RequestMapping(IndexController.REQUEST_PREFIX + "/orgmgr")
public class OrganizationController extends IndexController {
	@Autowired
	private OrganizationService organizationService;
	
	/**
	 * 跳转至机构管理页面。
	 * @author Chrise 2020年12月20日
	 * @return 页面路径。
	 */
	@RequestMapping("/goOrgMgrPage.xhtml")
	@Request("跳转至机构管理页面")
	public String goOrgMgrPageController() {
		return "/pc/organization/OrganizationsMgrPage";
	}
	
	/**
	 * 跳转至机构管理回收站页面。
	 * @author Chrise 2020年12月20日
	 * @return 页面路径。
	 */
	@RequestMapping(value = "/goOrgMgrPage.xhtml", params = "recycle=true")
	@Request("跳转至机构管理回收站页面")
	public String goOrgRecyclePageController() {
		return "/pc/organization/OrganizationsMgrPage";
	}
	
	/**
	 * 获取机构管理数据。
	 * @author Chrise 2020年12月20日
	 * @param params 查询参数。
	 * @return 机构管理数据。
	 */
	@ResponseBody
	@RequestMapping("/getOrgMgrList.xhtml")
	@PassiveRequest(value = "获取机构管理数据")
	public ModelMap getOrgMgrListController(@RequestParam Map<String, Object> params) {
		List<Map<String, Object>> result = this.organizationService.getOrgMgrListService(params);
		return super.createModel(true, result);
	}
	
	/**
	 * 跳转至新增/编辑页面。
	 * @author Chrise 2020年12月20日
	 * @return 页面路径。
	 */
	@RequestMapping("/goUpdateOrgMgrPage.xhtml")
	@Request("跳转至新增/编辑页面")
	public String goUpdateOrgMgrPageController() {
		return "/pc/organization/UpdateOrganizationsPage";
	}
	
	/**
	 * 获取父级机构数据。
	 * @author Chrise 2020年12月20日
	 * @return 父级机构数据。
	 */
	@ResponseBody
	@RequestMapping("/getParentOrgSelectList.xhtml")
	@PassiveRequest(value = "获取父级机构数据")
	public ModelMap getParentOrgSelectController() {
		List<Map<String, Object>> result = this.organizationService.getParentOrgSelectListService();
		return super.createModel(true, result);
	}
	
	/**
	 * 根据机构标识获取机构对象。
	 * @author Chrise 2020年12月20日
	 * @param entityid 机构标识。
	 * @return 机构对象。
	 */
	@ResponseBody
	@RequestMapping("/getOrgObjByOrgid.xhtml")
	@PassiveRequest(value = "根据机构标识获取机构对象")
	public ModelMap getOrgObjByOrgidController(Long entityid) {
		Organizations result = this.organizationService.getOrgObjByOrgidService(entityid);
		return super.createModel(true, result);
	}
	
	/**
	 * 新增机构对象。
	 * @author Chrise 2020年12月20日
	 * @param data 提交保存数据。
	 * @return 保存结果。
	 */
	@ResponseBody
	@RequestMapping(value = "/insertOrUpdateOrgObj.xhtml", params = "execute=add")
	@Request(value = "新增机构对象")
	public ModelMap insertOrgObjController(Organizations data) {
		Map<String, Object> result = new HashMap<String, Object>();
		this.organizationService.insertOrUpdateOrgObjService(data, result);
		return super.createModel(true, result);
	}
	
	/**
	 * 修改机构对象。
	 * @author Chrise 2020年12月20日
	 * @param data 提交保存数据。
	 * @return 保存结果。
	 */
	@ResponseBody
	@RequestMapping(value = "/insertOrUpdateOrgObj.xhtml", params = "execute=edit")
	@Request(value = "修改机构对象")
	public ModelMap updateOrgObjController(Organizations data) {
		Map<String, Object> result = new HashMap<String, Object>();
		this.organizationService.insertOrUpdateOrgObjService(data, result);
		return super.createModel(true, result);
	}
	
	/**
	 * 执行删除操作。
	 * @author Chrise 2020年12月20日
	 * @param entityid 机构标识。
	 * @return 删除结果。
	 */
	@ResponseBody
	@RequestMapping(value = "/updateEntitystateByOrgid.xhtml", params = "execute=del")
	@Request("执行删除操作")
	public ModelMap executeDeleteByOrgidController(String entityid) {
		Map<String, Object> result = new HashMap<String, Object>();
		this.organizationService.updateEntitystateByOrgidService(entityid, EntityState.INVALID.getValue(), result);
		return super.createModel(true, result);
	}
	
	/**
	 * 执行回收站恢复操作。
	 * @author Chrise 2020年12月20日
	 * @param entityid 机构标识。
	 * @return 恢复结果。
	 */
	@ResponseBody
	@RequestMapping(value = "/updateEntitystateByOrgid.xhtml", params = "execute=rest")
	@Request("执行回收站恢复操作")
	public ModelMap executeRestoreByOrgidController(String entityid) {
		Map<String, Object> result = new HashMap<String, Object>();
		this.organizationService.updateEntitystateByOrgidService(entityid, EntityState.VALID.getValue(), result);
		return super.createModel(true, result);
	}
	
	/**
	 * 执行回收站删除操作。
	 * @author Chrise 2020年12月20日
	 * @param entityid 机构标识。
	 * @return 删除结果。
	 */
	@ResponseBody
	@RequestMapping(value = "/updateEntitystateByOrgid.xhtml", params = "execute=delRecyce")
	@Request("执行回收站删除操作")
	public ModelMap executeDelRecyceByOrgidController(String entityid) {
		Map<String, Object> result = new HashMap<String, Object>();
		this.organizationService.updateEntitystateByOrgidService(entityid, EntityState.DELETED.getValue(), result);
		return super.createModel(true, result);
	}
	
	/**
	 * 跳转至机构详情页面。
	 * @author Chrise 2020年12月20日
	 * @return 页面路径。
	 */
	@RequestMapping("/goOrganizationsDetailPage.xhtml")
	@Request("跳转至机构详情页面")
	public String goOrganizationsDetailPageController() {
		return "/pc/organization/OrganizationsDetailPage";
	}
	
	/**
	 * 根据机构标识查询机构详情。
	 * @author Chrise 2020年12月20日
	 * @param entityid 机构标识。
	 * @return 机构详情数据。
	 */
	@ResponseBody
	@RequestMapping("/getOrganizationsDetailDataByOrgid.xhtml")
	@PassiveRequest(value = "根据机构标识查询机构详情")
	public ModelMap getOrganizationsDetailDataByOrgidController(String entityid) {
		Map<String, Object> result = this.organizationService.getOrganizationsDetailDataByOrgidService(entityid);
		return super.createModel(true, result);
	}
}
